package com.yxw.yxnet_cd_center.customer_service.service;

import com.yxw.yxnet_cd_center.customer_service.dto.NoticeQueryDTO;
import com.yxw.yxnet_cd_center.customer_service.dto.SendNoticeViewDTO;
import com.yxw.yxnet_cd_center.customer_service.dto.NoticeAddDTO;
import com.yxw.yxnet_cd_center.customer_service.dto.SendDelayNoticeDTO;
import com.yxw.yxnet_cd_center.customer_service.dto.SendNoticeSmsDTO;
import com.yxw.yxnet_cd_center.customer_service.dto.ChatRecordQueryDTO;
import com.yxw.yxnet_cd_center.common.dto.PageVO;
import com.yxw.yxnet_cd_center.common.enums.NoticeTypeEnum;
import com.yxw.yxnet_cd_center.customer_service.vo.ChatRecordVo;
import com.yxw.yxnet_cd_center.customer_service.vo.YxCsNoticeVo;

import java.util.List;

/**
 * 消息设置
 * @author liuxin
 * @date 2023.09.15
 */
public interface NoticeService {

    /**
     * 消息设置-消息通知列表查询
     * @param dto
     * @return
     */
    PageVO<YxCsNoticeVo> pageNoticeList(NoticeQueryDTO dto);

    /**
     * 消息设置-新增消息通知
     * @param dto
     * @return
     */
    YxCsNoticeVo addNotice(NoticeAddDTO dto);

    /**
     * 消息设置-消息通知详情
     * @param noticeId
     * @return
     */
    YxCsNoticeVo getNoticeInfoById(Long noticeId);

    /**
     * 消息设置-修改消息通知
     * @param dto
     */
    void updateNotice(NoticeAddDTO dto);

    /**
     * 删除消息通知
     */
    void deleteNoticeById(Long noticeId);

    /**
     * 消息通知状态修改
     * @param noticeId
     */
    void updateStatusById(Long noticeId);

    /**
     * 消息设置-聊天记录列表统计
     * @param dto
     * @return
     */
    PageVO<ChatRecordVo> pageChatRecord(ChatRecordQueryDTO dto);

    /**
     * 消息提醒-页面提醒发送
     * @param dto
     */
    void sendNoticeToView(SendNoticeViewDTO dto);

    /**
     * 消息提醒-短信发送
     * @param dto
     */
    void sendNoticeToSms(SendNoticeSmsDTO dto);

    /**
     * 轮询消息推送
     * @param dto
     */
    void pushCircleNoticeToView(SendNoticeViewDTO dto);

    /**
     * 轮询消息处理取消推送接口
     * @param dto
     */
    void cancelNoticeToView(SendNoticeViewDTO dto);

    /**
     * 3分钟未处理消息推送
     * @param dto
     */
    void delayReminderScenario(SendDelayNoticeDTO dto);

    /**
     * 抽取客服接待客户数统计
     */
    void execChatStatistics();
}
